package com.cat.service.Impl;

import com.cat.dao.Impl.StudentDaoImpl;
import com.cat.dao.inter.StudentDao;
import com.cat.execption.DaoExecption;
import com.cat.execption.ServiceExecption;
import com.cat.pojo.Student;
import com.cat.service.inter.StudentService;
import com.cat.util.MD5Util;

import java.util.List;

import static com.cat.util.Constant.loginConstant.*;

/**
 * @author HYC kobe524348@gmail.com
 * @name StudentService
 * @description 用于提供学生注册，登陆，查询，更新，删除等服务
 * @notice none
 * @date 2019/4/2
 */
public class StudentServiceImpl implements StudentService {
    StudentDao studentDAO = new StudentDaoImpl();

    /**
     * @param stu 传入要注册的学生信息
     * @return java.lang.Object
     * @name catRegister
     * @description 用于提供学生的注册功能
     * @notice 注册不一定成功，如果账户已存在则不可重复注册
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public Object catRegister(Student stu) {
        if (isExist(stu)) {
            return ACCOUNT_ALREADY_EXIST;
        } else {
            try {
                addStudent(stu);
            } catch (DaoExecption e) {
                throw new ServiceExecption("failed to add student", e);
            }
            return REGISTER_SUCCESS;
        }
    }

    /**
     * @param stuId 传入要登陆的学生id
     * @param pwd   传入用户输入的密码
     * @return java.lang.Object
     * @name catLogin
     * @description
     * @notice 如果密码错误，或账户不存在，将返回对应的错误
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public Object catLogin(String stuId, String pwd) {
        List<Student> list = studentDAO.findStudent("studentId", stuId);
        if (list.size() > 0) {
            Student stu = list.get(0);
            if (!MD5Util.getDigest(pwd).equals(stu.getPassword())) {
                return PASSWORD_INCRECTE;
            } else {
                return LOGIN_SUCCESS;
            }
        } else {
            return ACCOUNT_NOT_FOUND;
        }
    }


    /**
     * @return java.util.List 返回所有学生的信息对象List
     * @name getAllStudents
     * @description 用于获取当前系统中的所有学生信息
     * @notice 请注意拿到的List要判空，有可能返回一个空的List
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public List<Object> getAllStudents() {
        return studentDAO.getAllStudent();
    }


    /**
     * @param stu 传入一个要添加的学生信息对象
     * @name addStudent
     * @description 用于在系统中添加一个学生
     * @notice none
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public void addStudent(Student stu) throws DaoExecption {
        if (!isExist(stu)) {
            studentDAO.addStudent(stu);
        } else {
            throw new ServiceExecption("Error in add student : This student is already exist !");
        }
    }


    /**
     * @param stu 传入一个要删除的学生信息对象
     * @name deleteStudent
     * @description 用于从系统中删除一个学生
     * @notice none
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public void deleteStudent(Student stu) throws DaoExecption {
        if (isExist(stu)) {
            studentDAO.deleteStudent(stu);
        } else {
            throw new ServiceExecption("Error in delete student : This student is not exist !");
        }
    }


    /**
     * @param stu 传入一个要更新的学生信息对象
     * @name updateStudent
     * @description 用于更新一个学生的所有信息
     * @notice none
     * @author HYC kobe524348@gmail.com
     * @date 2019/4/2
     */
    @Override
    public void updateStudent(Student stu) throws DaoExecption {
        if (isExist(stu)) {
            studentDAO.updateStudent(stu);
        } else {
            throw new ServiceExecption("Error in update student info : This student is not exist !");
        }
    }


    /**
     * @Description: 用于获取符合条件的学生，即属性attr的值为value的学生
     * 使用示例：findStudent(studentId,1234);则返回学生id为1234的学生
     * findStudent(gender,"男")；则返回性别为男的所有学生
     * @return: List 符合条件的学生集合
     * @Author: HYC email:kobe524348@gmail.com
     * @Date: 2019/3/27
     */
    @Override
    public List<Student> findStudent(String attr, String value) {
        return studentDAO.findStudent(attr, value);
    }


    /**
     * @Description: 用于判断一个学生是否已经存在于系统中
     * @Param: stu 传入要判断是否存在的学生
     * @return: boolean
     * @Author: HYC email:kobe524348@gmail.com
     * @Date: 2019/3/27
     */
    private boolean isExist(Student stu) {
        if (studentDAO.findStudent("studentId", stu.getStudentId()).size() > 0) {
            return true;
        } else {
            return false;
        }
    }


}
